package main

import (
	"fmt"
	"time"
)

func main() {
	timeout := make(chan bool, 1)
	go func() {
		//认为5秒没收到数据就算超时
		time.Sleep(5 * time.Second)
		timeout <- true
	}()

	ch := make(chan int)
	go func() {
		for i := 0; i < 3; i++ {
			time.Sleep(3 * time.Second)
			ch <- i
		}
	}()
	//select可以让goroutine监听多个通道，当有通道数据准备好时，执行对应的case，如果多个通道都准备好，随机选取一个通道执行
	select {
	case v := <-ch:
		fmt.Println("从ch接收数据：", v)
	case <-timeout:
		fmt.Println("接收数据超时")
	}
}
